/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.util.*;
import Util.*;
//import java.util.ArrayList;

/**
 *
 * @author u61851
 */
public class EjecutoraMaquinas {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner in = new Scanner(System.in);
        int opc, t;
        MaqCambio mCambio;
        MaqExpendedora mExpendedora;
        ArrayList<Moneda> monedas = new ArrayList<Moneda>(); // monedas existentes
        ArrayList<Billete> billetes = new ArrayList<Billete>(); // billetes existentes

        do {
            System.out.println("=========\tSIMULACION DE MAQUINAS EXPENDEDORA Y CAMBIO\t=========");
            System.out.println("\n\nSeleccione la Maquina a Simular: ");
            System.out.println("1. Maquina Expendedora de Bebidas");
            System.out.println("2. Maquina de Dar Cambio");
            System.out.println("3. Alta de Monedas o Billetes");
            System.out.println("0. Salir");
            System.out.print("\nIngrese opcion: ");
            opc = in.nextInt();
            switch (opc) {
                case 1: {
                    mExpendedora = new MaqExpendedora(monedas); // le paso las monedas que estan habilitados para su uso
                    mExpendedora.iniciarSimulacion(); // inicio simulacion de la maquina
                }
                break;
                case 2: {
                    mCambio = new MaqCambio(monedas, billetes); // le paso las monedas y billetes que estan habilitados para su uso
                    mCambio.iniciarSimulacion(); // inicio la simulacion de la maquina
                }
                break;
                case 3:
                    do {
                        System.out.println("Ingrese el tipo de Dinero que va a dar de alta:"+
                                "\n\t1. Moneda"+
                                "\n\t2. Billete"+
                                "\n\t0. Salir");
                        t = in.nextInt();
                        switch (t) {
                            case 1:
                                AltaMoneda(monedas);
                                break;
                            case 2:
                                AltaBillete(billetes);
                                break;
                            default:
                                if (t != 0) {
                                    System.out.println("El tipo que ingreso no es correcto");
                                }
                                break;
                        }
                    } while (t != 0);
                    break;
            }
        } while (opc != 0);


    }

    public static void AltaMoneda(ArrayList<Moneda> monedas) {

        Moneda m;
        float mValor;
        String detalle;
        int i, codigo;

        if (monedas.isEmpty()) {
            codigo = 1;
        } else {
            codigo = monedas.get(monedas.size() - 1).getCodigo() + 1;
        }

        Scanner in = new Scanner(System.in);
        System.out.print("Ingrese el valor de la moneda: ");
        mValor = in.nextFloat();
        System.out.print("Ingrese el detalle de la moneda: ");
        detalle = in.next();

        m = new Moneda(codigo, detalle, mValor);

        i = 0;

        while (monedas.size() > i && monedas.get(i).getValor() != m.getValor()) {
            i++;
        }

        if (monedas.size() > i) {
            System.out.println("Esta moneda ya existe");
        } else {
            monedas.add(m); // la moneda no existe, entonces la agrego
        }
    }

    public static void AltaBillete(ArrayList<Billete> billetes) {
        Billete b;
        int bValor;
        String detalle;
        int i, codigo;

        Scanner in = new Scanner(System.in);

        if (billetes.isEmpty()) {
            codigo = 1;
        } else {
            codigo = billetes.get(billetes.size() - 1).getCodigo() + 1;
        }

        System.out.print("Ingrese el valor del billete: ");
        bValor = in.nextInt();
        System.out.print("Ingrese el detalle del billete: ");
        detalle = in.next();

        b = new Billete(codigo, detalle, bValor);

        i = 0;
        while (billetes.size() > i && billetes.get(i).getValor() != b.getValor()) {
            i++;
        }

        if (billetes.size() > i) {
            System.out.println("Esta moneda ya existe");
        } else {
            billetes.add(b);
        }
    }
    /* Deprecated
    private Moneda getMoneda(int codigo, ArrayList<Moneda> monedas) {
    Moneda m;
    int i = 0;
    while (i < monedas.size() && monedas.get(i).getCodigo() != codigo) {
    i++;
    }
    if (monedas.get(i).getCodigo() == codigo) {
    m = monedas.get(i);
    } else {
    m = null;
    }
    return m;
    }
     */

    /* Deprecated
    private void mostrarMonedas(ArrayList<Moneda> monedas) {
    for (Moneda m : monedas) {
    System.out.println("Moneda ( Cod. " + m.getCodigo() + " ) de valor: $" + m.getValor());
    }
    }
     */

    /* Deprecated
    private void mostrarBilletes(ArrayList<Billete> billetes) {
    for (Billete b : billetes) {
    System.out.println("Billete ( Cod. " + b.getCodigo() + " ) de valor: $" + b.getValor());
    }
    }
     */

    /* Deprecated
    private void darGaseosa(MaqExpendedora mExpendedora, ArrayList<Moneda> monedas) {
    Scanner in = new Scanner(System.in);
    ArrayList<Moneda> importe = new ArrayList<Moneda>();
    Hashtable<Dinero, Integer> vueltoMonedas = new Hashtable<Dinero, Integer>();
    Moneda m;
    int codigo;
    int t = 0;

    System.out.println("Seleccione el producto que desea comprar, e ingrese el codigo");
    mExpendedora.informarPrecio();
    codigo = in.nextInt();
    Producto p = mExpendedora.getProducto(codigo);

    if (p.getStockReal() > 0) {
    do {
    System.out.println("Ingrese las monedas. 0. para salir");
    this.mostrarMonedas(monedas);
    t = in.nextInt();
    if (t != 0) {
    m = this.getMoneda(t, monedas);
    if (m == null) {
    System.out.println("La moneda que intenta ingresar no existe");
    } else {
    importe.add(m);
    }
    }
    } while (t != 0);


    float importeIngresado = mExpendedora.ingresarImporte(importe);
    vueltoMonedas = mExpendedora.darGaseosa(p, importeIngresado);

    System.out.println("Su vuelto fue de: ");
    for (Enumeration e = vueltoMonedas.keys(); e.hasMoreElements();) { // espero que esto funcione!
    m = (Moneda) e.nextElement();
    System.out.println(vueltoMonedas.get(m) + " monedas de $" + m.getValor()); // imprime: Su vuelto fue de: X monedas de $0.5
    }
    } else {
    System.out.println("No hay stock para este producto");
    }
    }
     */
}
